# 设计散点图
import numpy as np
import matplotlib.pyplot as plt

import keras
from keras import layers

# --------------  散点图----------------
w = 3 # 未知状态
b = 1 # 未知状态

x = np.arange(0,7)
noise = np.random.rand(len(x)) * 2
y = w * (x + noise) + (b + noise)

plt.plot(x,y,'ro')

# -------------- 预测线 ---------------

# 构建训练模型
model = keras.Sequential([
    # layers.Dense(1) == 求导功能
    layers.Flatten(input_shape=(1,)), # 输入 x
    # layers.Dense(1,activation="sigmoid"),
    layers.Dense(1) # 输出 y
])

# sigmoid函数
model.compile(
    # 优化器 ：梯度 = w - 固定值 * 斜率 （SGD）
    optimizer=keras.optimizers.SGD(learning_rate=0.01),
    # 损失函数
    # 均方误差（mean-square error, MSE）是反映估计量与被估计量之间差异程度的一种度量。
    loss="MSE",
    # 预估值的准确率 （将均方差转化成误差百分比，反应与真实值之间的差距）
    metrics=['acc']
)
# 训练模型
# epochs 训练次数
history = model.fit(x,y,epochs=1000)

# 预测模型
predict_y = model.predict(x)

# 绘制预测的图像
plt.plot(x,predict_y,'b--')

plt.show()